// 监听来自主进程的消息
process.on('message', function(data) {
  try {
    console.log('子进程接收到数据:', data);
    // 执行计算任务
    const result = processData(data);
    // 向主进程发送结果
    if (process.send) {
      process.send(result);
    }
    
    // 任务完成后主动退出子进程，避免资源泄漏
    process.exit(0);
  } catch (error) {
    console.error('子进程执行出错:', error);
    
    // 发送错误信息给主进程
    if (process.send) {
      process.send({ error: error.message });
    }
    
    // 以非零状态码退出表示执行失败
    process.exit(1);
  }
});

/**
 * 处理数据的主要函数
 * @param {any} data 从主进程接收的数据
 * @returns {any} 处理结果
 */
function processData(data) {
  // 检查数据类型并执行相应的计算
  if (Array.isArray(data)) {
    const total = data.reduce(function(acc, cur) {
      return acc + (typeof cur === 'number' ? cur : 0);
    }, 0);
    
    console.log('子进程计算结果:', total);
    return {
      result: total,
      originalDataLength: data.length,
      timestamp: new Date().toISOString()
    };
  } else if (typeof data === 'object' && data !== null) {
    // 处理对象数据
    return {
      processed: true,
      objectKeys: Object.keys(data).length,
      timestamp: new Date().toISOString()
    };
  }
  
  // 返回默认响应
  return {
    result: data,
    timestamp: new Date().toISOString()
  };
}

// 处理SIGTERM信号，优雅退出
process.on('SIGTERM', function() {
  console.log('子进程收到终止信号');
  process.exit(0);
});

// 处理未捕获的异常
process.on('uncaughtException', function(error) {
  console.error('子进程未捕获异常:', error);
  
  if (process.send) {
    process.send({ error: error.message });
  }
  
  process.exit(1);
});
